gbfread(QString& buf, const gbsize_t size,
const gbsize_t members, gbfile* file)
{
- // xcalloc() ensures the buf is zero terminated, so it's a proper c string.
- char* tmp = static_cast<char*>(xcalloc(members, size));
- gbsize_t retval = gbfread(tmp, size, members, file);
+ QByteArray tmp;
+ tmp.resize(members * size);
+ gbsize_t retval = gbfread(tmp.data(), size, members, file);
buf = QString(tmp);
return retval;
}
QString
gbfgetpstr(gbfile* file)
{
- int len;
- char* result;
-
- len = gbfgetc(file);
- result = (char*) xmalloc(len + 1);
- if (len > 0) {
- gbfread(result, 1, len, file);
- }
- result[len] = '\0';
+ int len = gbfgetc(file);
+ QByteArray ba;
+ ba.resize(len);
+ gbfread(ba.data(), 1, len, file);
- QString r(result);
- xfree(result);
- return r;
+ return QString(ba);
}
static char*
// length is number of "characters" not number of bytes
len = (unsigned)gbfgetc(fin);
if (len > 0) {
- unsigned int ii, jj, ch, resbytes=0;
+ unsigned int ch, resbytes=0;
res = (char*) xmalloc(len*2 + 1); // bigger to allow for utf-8 expansion
- for (ii=0; ii<len; ii++) {
+ for (signed int ii = 0; ii<len; ii++) {
char utf8buf[8];
int utf8len;
ch = gbfgetint16(fin);
// convert to utf-8, possibly multiple bytes
utf8len = cet_ucs4_to_utf8(utf8buf, sizeof(utf8buf), ch);
- for (jj=0; jj < utf8len; jj++) {
+ for (signed int jj = 0; jj < utf8len; jj++) {
res[resbytes++] = utf8buf[jj];
}
}
res[len] = '\0';
if (len) {
gbfread(res, len, 1, fin);
- if (len != strlen(res)) {
+ if (static_cast<size_t>(len) != strlen(res)) {
// strlen requires a size_t, but Microsoft's stupid compiler doesn't
// do C99 %zd. Thanx, Microsoft.
fprintf(stdout, "got len %d but str is '%s' (strlen %d)\n", len, res, (int) strlen(res));